source ./conf.sh

function adicionar(){
	echo -e "\E[35;1mPreencha as informações necessárias (Nome, Sobrenome, DDD, Telefone e E-mail), para adicionar o novo contato:\n\E[m"

	for dados in ${LISTA[@]}; do
		while [[ -z "${dados[i]}" ]]; do
			read -p "${dados}: " dados[$i]
		done

		((i++))

	done

	# Verificar se o ID já existe no banco de dados
	if grep -q "^${dados[1]}:" "$BD"; then
		echo -e "\E[31;1mO ID ${dados[1]} já existe no banco de dados.\E[m"
		exit 1
	fi

	echo -e "\E[35;1m\nConferência: ID:${dados[1]}, NOME:${dados[2]}, SOBRENOME:${dados[3]}, DDD:${dados[4]}, Telefone:${dados[5]}, E-MAIL:${dados[6]}\E[m"

	echo -e "\E[35;1m\nContato Adicionado com sucesso.\E[m"

	echo ${dados[1]}:${dados[2]}:${dados[3]}:${dados[4]}:${dados[5]}:${dados[6]} | sed 's/-//g' | sed 's/ /:/g'  | tr 'A-Z' 'a-z' >> $BD
}

function buscar(){

	local opcao="s"

	while [[ $opcao == "s" ]]; do
		read -p "O que deseja buscar? [ID|NOME|SOBRENOME|TELEFONE|EMAIL] " valor
		local resultado=""
		valor=${valor,,} 

		# Verifica qual forma de busca vai ser usada e utiliza o grep para buscar no BD
		if [[ "$valor" == "id" ]]; then
			read -p "Qual ID deseja buscar? " id
			echo -e "\E[35;1m\nFazendo busca...\n\E[m"
			sleep 1
			resultado=$(grep "^${id}:" "$BD")
		elif [[ "$valor" == "nome" ]]; then
			read -p "Qual NOME deseja buscar? " nome
			nome=${nome,,}
			echo -e "\E[35;1m\nFazendo busca...\n\E[m"
			sleep 1
			resultado=$(grep ":${nome}:" "$BD")
		elif [[ "$valor" == "sobrenome" ]]; then
			read -p "Qual SOBRENOME deseja buscar? " sobrenome
			sobrenome=${sobrenome,,}
			echo -e "\E[35;1m\nFazendo busca...\n\E[m"
			sleep 1
			resultado=$(grep ":${sobrenome}:" "$BD")
		elif [[ "$valor" == "telefone" ]]; then
			read -p "Qual TELEFONE deseja buscar? " telefone
			telefone=$(echo $telefone | sed 's/-//g')
			echo -e "\E[35;1m\nFazendo busca...\n\E[m"
			sleep 1
			resultado=$(grep ":${telefone}:" "$BD")
		elif [[ "$valor" == "email" ]]; then
			read -p "Qual E-MAIL deseja buscar? " email
			echo -e "\E[35;1m\nFazendo busca...\n\E[m"
			sleep 1
			resultado=$(grep "${email}" "$BD")
		else
			echo -e "\E[31;1mEscolha uma opção correta\E[m"
			exit 1
		fi

		# Verifica se a variável resultado agora possui algum valor e imprimi
		if [[ -n "$resultado" ]]; then
			echo -e "\E[31;1mNota-se que o padrão para a busca é seguido na ordem:ID:NOME:SOBRENOME:DDD:TELEFONE:EMAIL\E[m"
			echo -e "\E[35;1m\nResultado da busca:\E[m"
			echo -e "$resultado\n"
			read -p "Deseja fazer uma nova busca?[S/N] " opcao
			opcao=${opcao,,}
		else
			echo -e "\E[31;1mNenhum registro encontrado para a busca.\E[m\n"
			read -p "Deseja fazer uma nova busca?[S/N] " opcao
			opcao=${opcao,,}
		fi
	done
}

function remover(){
    read -p "Qual ID você deseja remover? " local_id

	if [[ -z "$local_id" ]]; then
        echo -e "\E[31;1m\nID não especificado. A exclusão foi cancelada.\E[m"
        exit 1
    fi

    # Verificar se o ID existe no banco de dados
    if grep -q "^${local_id}:" "$BD"; then
		read -p "Tem certeza que deseja remover o ID:${local_id}-$(grep ${local_id} ${BD} | cut -d ':' -f 2-3), do banco de dados?[S/N] " local_opt
		local_opt="${local_opt,,}"
		if [[ $local_opt == "n" ]]; then
			exit 0
		fi

		# Cria uma cópia do arquivo original
		cp "$BD" "$BD.tmp"

		# Remove a linha com o ID especificado do arquivo temporário
		sed -i "/^${local_id}:/d" "$BD.tmp"

		# Verifica se a linha foi encontrada e excluída
		if [[ $? -eq 0 ]]; then
			# Substitui o arquivo original pelo arquivo temporário
			mv "$BD.tmp" "$BD"
			echo -e "\E[35;1mO ID:${local_id} foi removido com sucesso.\E[m"
			exit 0
		else
			echo -e "\E[31;1mID não encontrado.\E[m"
			rm "$BD.tmp"
		fi
	else
        echo -e "\E[31;1mID não encontrado.\E[m"
        exit 1
    fi
}

function listar(){
	# Verifica se o arquivo do banco de dados existe
    if [[ ! -f "$BD" ]]; then
        echo -e "\E[31;1mBanco de dados não encontrado.\E[m"
        exit 1
    fi

    echo -e "\E[34;1mConteúdo do banco de dados:\n"
    cat "$BD" && echo -e "\E[m\n"

	read -p "Deseja adicionar um novo contato?[S/N] " opt

	opt=$(echo $opt | tr 'A-Z' 'a-z')

	if [[ ! $opt == "s" ]]; then
		echo -e "\E[31;1mSaindo...\E[m"
		exit 0
	else
		adicionar
	fi
}

function ajuda(){
	echo -e "\E[35;1m"
	cat manual.md
	exit 0
}
